#----------------------------------------------------------------
# OBLIGE
#----------------------------------------------------------------
#
# GNU Makefile for Unix/Linux with system-wide install
#
# Using this makefile (make, make install) will place the
# executable, script and data files in standard Unixy places.
# The script and data files can be overridden by files in the
# $HOME/.oblige-legacy4 directory.
#
# NOTE: a system-wide FLTK library is assumed
#

PROGRAM=oblige-legacy4

# prefix choices: /usr  /usr/local  /opt
INSTALL_PREFIX=/usr/local

SCRIPT_DIR=$(INSTALL_PREFIX)/share/oblige-legacy4

CXX=g++

LIB_LOC=lib_linux
OBJ_DIR=obj_linux

OPTIMISE=-O2

# operating system choices: UNIX WIN32
OS=UNIX


#--- Internal stuff from here -----------------------------------

# assumes system-wide FLTK installation
FLTK_CONFIG=fltk-config
FLTK_FLAGS=$(shell $(FLTK_CONFIG) --cflags)
FLTK_LIBS=$(shell $(FLTK_CONFIG) --use-images --ldflags)

CXXFLAGS=$(OPTIMISE) -Wall -D$(OS) -Ilua_src -Iglbsp_src $(FLTK_FLAGS)
LDFLAGS=-L/usr/X11R6/lib 
LIBS=-lm -lz $(FLTK_LIBS)

CXXFLAGS += -DFHS_INSTALL


#----- OBLIGE Objects ----------------------------------------------

OBJS=	$(OBJ_DIR)/main.o      \
	$(OBJ_DIR)/m_cookie.o  \
	$(OBJ_DIR)/m_lua.o     \
	$(OBJ_DIR)/m_spots.o   \
	$(OBJ_DIR)/lib_argv.o  \
	$(OBJ_DIR)/lib_file.o  \
	$(OBJ_DIR)/lib_signal.o \
	$(OBJ_DIR)/lib_util.o  \
	$(OBJ_DIR)/lib_grp.o   \
	$(OBJ_DIR)/lib_pak.o   \
	$(OBJ_DIR)/lib_wad.o   \
	$(OBJ_DIR)/lib_zip.o   \
	$(OBJ_DIR)/sys_assert.o \
	$(OBJ_DIR)/sys_debug.o \
	$(OBJ_DIR)/img_bolt.o  \
	$(OBJ_DIR)/img_pill.o  \
	$(OBJ_DIR)/img_carve.o \
	$(OBJ_DIR)/img_relief.o \
	$(OBJ_DIR)/img_font1.o  \
	\
	$(OBJ_DIR)/csg_bsp.o  \
	$(OBJ_DIR)/csg_clip.o  \
	$(OBJ_DIR)/csg_main.o  \
	$(OBJ_DIR)/csg_doom.o  \
	$(OBJ_DIR)/csg_nukem.o \
	$(OBJ_DIR)/csg_quake.o \
	$(OBJ_DIR)/dm_extra.o  \
	$(OBJ_DIR)/g_doom.o    \
	$(OBJ_DIR)/g_nukem.o   \
	$(OBJ_DIR)/g_quake.o   \
	$(OBJ_DIR)/g_quake2.o  \
	$(OBJ_DIR)/g_wolf.o    \
	$(OBJ_DIR)/q_common.o  \
	$(OBJ_DIR)/q_light.o   \
	$(OBJ_DIR)/q_tjuncs.o  \
	$(OBJ_DIR)/q_vis.o     \
	$(OBJ_DIR)/vis_buffer.o \
	\
	$(OBJ_DIR)/twister.o   \
	$(OBJ_DIR)/tx_forge.o  \
	$(OBJ_DIR)/tx_skies.o  \
	$(OBJ_DIR)/ui_about.o  \
	$(OBJ_DIR)/ui_build.o  \
	$(OBJ_DIR)/ui_chooser.o \
	$(OBJ_DIR)/ui_console.o \
	$(OBJ_DIR)/ui_dialog.o \
	$(OBJ_DIR)/ui_game.o   \
	$(OBJ_DIR)/ui_hyper.o  \
	$(OBJ_DIR)/ui_level.o  \
	$(OBJ_DIR)/ui_map.o    \
	$(OBJ_DIR)/ui_module.o \
	$(OBJ_DIR)/ui_rchoice.o \
	$(OBJ_DIR)/ui_play.o   \
	$(OBJ_DIR)/ui_window.o

$(OBJ_DIR)/%.o: gui/%.cc
	$(CXX) $(CXXFLAGS) -o $@ -c $<


#----- LUA Objects --------------------------------------------------

LUA_OBJS=\
	$(OBJ_DIR)/lua/lapi.o     \
	$(OBJ_DIR)/lua/lcode.o    \
	$(OBJ_DIR)/lua/ldebug.o   \
	$(OBJ_DIR)/lua/ldo.o      \
	$(OBJ_DIR)/lua/ldump.o    \
	$(OBJ_DIR)/lua/lfunc.o    \
	$(OBJ_DIR)/lua/lgc.o      \
	$(OBJ_DIR)/lua/llex.o     \
	$(OBJ_DIR)/lua/lmem.o     \
	$(OBJ_DIR)/lua/lobject.o  \
	$(OBJ_DIR)/lua/lopcodes.o \
	$(OBJ_DIR)/lua/lparser.o  \
	$(OBJ_DIR)/lua/lstate.o   \
	$(OBJ_DIR)/lua/lstring.o  \
	$(OBJ_DIR)/lua/ltable.o   \
	$(OBJ_DIR)/lua/ltm.o      \
	$(OBJ_DIR)/lua/lundump.o  \
	$(OBJ_DIR)/lua/lvm.o      \
	$(OBJ_DIR)/lua/lzio.o     \
	\
	$(OBJ_DIR)/lua/lauxlib.o   \
	$(OBJ_DIR)/lua/lbaselib.o  \
	$(OBJ_DIR)/lua/ldblib.o    \
	$(OBJ_DIR)/lua/liolib.o    \
	$(OBJ_DIR)/lua/lmathlib.o  \
	$(OBJ_DIR)/lua/loslib.o    \
	$(OBJ_DIR)/lua/ltablib.o   \
	$(OBJ_DIR)/lua/lstrlib.o   \
	$(OBJ_DIR)/lua/loadlib.o   \
	$(OBJ_DIR)/lua/linit.o

LUA_CXXFLAGS=$(OPTIMISE) -Wall -DLUA_ANSI

$(OBJ_DIR)/lua/%.o: lua_src/%.cc
	$(CXX) $(LUA_CXXFLAGS) -o $@ -c $<


#----- glBSP Objects ------------------------------------------------

GLBSP_OBJS= \
	$(OBJ_DIR)/glbsp/analyze.o  \
	$(OBJ_DIR)/glbsp/blockmap.o \
	$(OBJ_DIR)/glbsp/glbsp.o    \
	$(OBJ_DIR)/glbsp/level.o    \
	$(OBJ_DIR)/glbsp/node.o     \
	$(OBJ_DIR)/glbsp/reject.o   \
	$(OBJ_DIR)/glbsp/seg.o      \
	$(OBJ_DIR)/glbsp/system.o   \
	$(OBJ_DIR)/glbsp/util.o     \
	$(OBJ_DIR)/glbsp/wad.o

GLBSP_CXXFLAGS=$(OPTIMISE) -Wall -DINLINE_G=inline

$(OBJ_DIR)/glbsp/%.o: glbsp_src/%.cc
	$(CXX) $(GLBSP_CXXFLAGS) -o $@ -c $< 


#----- Targets ----------------------------------------------------

all: $(PROGRAM)

clean:
	rm -f $(PROGRAM) $(OBJ_DIR)/*.o ERRS
	rm -f $(OBJ_DIR)/lua/*.o
	rm -f $(OBJ_DIR)/glbsp/*.o

$(PROGRAM): $(OBJS) $(LUA_OBJS) $(GLBSP_OBJS)
	$(CXX) $^ -o $@ $(LDFLAGS) $(LIBS)

stripped: $(PROGRAM)
	strip --strip-unneeded $(PROGRAM)

install: stripped
	install -o root -m 755 $(PROGRAM) $(INSTALL_PREFIX)/bin/
	install -d $(SCRIPT_DIR)/scripts
	install -d $(SCRIPT_DIR)/data
	install -d $(SCRIPT_DIR)/data/doom1_boss
	install -d $(SCRIPT_DIR)/data/doom2_boss
	install -d $(SCRIPT_DIR)/games
	install -d $(SCRIPT_DIR)/engines
	install -d $(SCRIPT_DIR)/modules
	install -d $(SCRIPT_DIR)/prefabs
	install -o root -m 644 scripts/*.lua $(SCRIPT_DIR)/scripts
	install -o root -m 644 data/*.*      $(SCRIPT_DIR)/data
	install -o root -m 644 data/doom1_boss/*.*      $(SCRIPT_DIR)/data/doom1_boss
	install -o root -m 644 data/doom2_boss/*.*      $(SCRIPT_DIR)/data/doom2_boss
	install -o root -m 644 games/*.lua   $(SCRIPT_DIR)/games
	install -o root -m 644 engines/*.lua $(SCRIPT_DIR)/engines
	install -o root -m 644 modules/*.lua    $(SCRIPT_DIR)/modules
	install -o root -m 644 prefabs/*.lua    $(SCRIPT_DIR)/prefabs

uninstall:
	rm -v $(INSTALL_PREFIX)/bin/$(PROGRAM)
	rm -Rv $(SCRIPT_DIR) 

.PHONY: all clean stripped install uninstall

#--- editor settings ------------
# vi:ts=8:sw=8:noexpandtab
